// #define DEBUG
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
// using ll=long long;
const int N=110;
const int INF=0x3f3f3f3f;
int n, m; //n点 m边
vector<int> Graph[N];
int du[N], flag;
// flag:0没有拓扑序列(有环) 1当前拓扑序列唯一 -1拓扑序列不唯一(有多个度为0的点)
string ans;

int Topo() //以当前边能否确定唯一的拓扑序列
{
    int curdu[N];
    memcpy(curdu, du, sizeof du);
    ans.clear();
    int res=1; //当前存在唯一拓扑序列
    for(int i=0; i<n; i++)
    {
        int tot0=0; //度为0的点的个数
        int u=-1;
        for(int j=0; j<n; j++) if(curdu[j]==0) {tot0++, u=j;}
        if(tot0==0) return 0; //有环
        if(tot0>1) res=-1; //当前拓扑序列不唯一
        ans.push_back(u+'A');
        curdu[u]=-1;
        for(int v:Graph[u]) curdu[v]--;
        // for(int j=0; j<Graph[u].size(); j++)
        // {
        //     int v=Graph[u][j];
        //     curdu[v]--;
        // }
    }
    return res; 
}

void Print(int edge)
{
    if(flag==0) //没有拓扑序列->有环
        printf("Inconsistency found after %d relations.\n", edge, ans.c_str());
    else if(flag==1) //有唯一拓扑序列
        printf("Sorted sequence determined after %d relations: %s.\n", edge, ans.c_str());
    else printf("Sorted sequence cannot be determined.\n"); //拓扑序列不唯一
}

void solve()
{
    for(int i=0; i<=n; i++) Graph[i].clear();
    memset(du, 0, sizeof du);
    string str; 
    flag=-1; //当前不存在拓扑序列
    for(int i=1; i<=m; i++) //扫入m条边
    {
        cin >> str; int u=str[0]-'A', v=str[2]-'A';
        Graph[u].push_back(v);
        du[v]++; //入度
        //当前图中存在环||当前拓扑序列唯一
        if(flag==0||flag==1) continue;
        int temp=Topo();
        if(temp==0||temp==1) flag=temp, Print(i);
        // debug();
    }
    if(flag==-1) Print(m);
}

signed main()
{
    #ifdef DEBUG
        freopen("./in.txt", "r", stdin);
        freopen("./out.txt", "w", stdout);
    #endif
    while(cin >> n >> m)
    {
        if(!n&&!m) break;
        solve();
    }
    // cin >> n >> m;
    // while(n&&m)
    // {
    //     solve();
    //     cin >> n >> m;
    // }
    return 0;
}